// Date 对象方法
// getDate()   从 Date 对象返回一个月中的某一天 (1 ~ 31)。
// setDate()   设置 Date 对象中月的某一天 (1 ~ 31)。
// getMonth()  从 Date 对象返回月份 (0 ~ 11)。
// setMonth()  设置 Date 对象中月份 (0 ~ 11)。
// getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
// getTime()   返回 1970 年 1 月 1 日至今的毫秒数。
// getHours()  返回 Date 对象的小时 (0 ~ 23)。
// setHours()  设置 Date 对象中的小时 (0 ~ 23)。

/**
 * @description 时间格式化函数
 * @param {string} fmt - 时间格式，例如: "yyyy-MM-dd HH:mm:ss"
 * @param {Object} date - 日期对象，例如：new Date()
 * @return {string} 返回格式化后的日期字符串
 **/
function dateFtt(fmt, date) {
  const o = {
    'M+': date.getMonth() + 1, // 月份
    'd+': date.getDate(), // 日
    'H+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    'S': date.getMilliseconds(), // 毫秒
    'W': ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'][date.getDay()], // 星期
  }
  if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)) }
  for (const k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) { fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) }
  }
  return fmt
}

/**
 * @description 获取最近n(24、36、48、72)小时  时间数组
 * @param {Object} date - 日期对象 例如：new Date()
 * @param {number} [n=24]  - 最近多少个小时, 默认值为：24  例如：24
 * @param {string} [format='yyyy-MM-dd HH:mm:ss'] - 输出时间格式  例如：yyyy-MM-dd HH:mm:ss
 * @param {Object[]} result - 返回时间数组
 **/
function getTheLastHours(date, n = 24, format = 'yyyy-MM-dd HH:mm:ss') {
  let result = [];
  date.setHours(date.getHours());
  for (let i = 0; i < n; i++) {
    date.setHours(date.getHours() - 1);
    result.push(dateFtt(format, date));
  }
  return result.reverse();
}

/**
  * @description 获取最近n(7、30、60、90)天  时间数组
  * @param {Object} date - 日期对象 例如：new Date()
  * @param {number} [n=30]  - 最近多少天, 默认值为30  例如：30
  * @param {string} [format='yyyy-MM-dd HH:mm:ss'] - 输出时间格式  例如：yyyy-MM-dd HH:mm:ss
  * @return {Object[]} result - 返回时间数组
  **/
function getTheLastDays(date, n = 30, format = 'yyyy-MM-dd HH:mm:ss') {
  let result = [];
  // result.push(dateFtt(format, date));
  for (let i = 0; i < n; i++) {
    date.setDate(date.getDate() - 1);
    result.push(dateFtt(format, date));
  }
  return result.reverse();
}

/**
  * @description 获取最近n(24、36、48、72)个月  时间数组
  * @param {Object} date - 日期对象  例如：new Date()
  * @param {number} [n=12] 最近多少个月  例如：24
  * @param {string} [format='yyyy-MM-dd HH:mm:ss'] 输出时间格式  例如：yyyy-MM-dd HH:mm:ss
  * @return {Object[]} result - 返回时间数组
  **/
function getTheLastMonths(date, n = 12, format = 'yyyy-MM-dd HH:mm:ss') {
  let result = [];
  date.setDate(1);
  date.setMonth(date.getMonth() + 1);  // 获取当前月份，设置月份
  for (let i = 0; i < n; i++) {
    date.setMonth(date.getMonth() - 1);
    result.push(dateFtt(format, date));
  }
  return result.reverse();
}

/**
  * @description 获取最近n(3、5、10、15)年  时间数组
  * @param {Object} date - 日期对象  例如：new Date()
  * @param {number} [n=5] 最近多少年  例如：5
  * @param {string} [format='yyyy-MM-dd HH:mm:ss'] 输出时间格式  例如：yyyy-MM-dd HH:mm:ss
  * @return {Object[]} result - 返回时间数组
  **/
function getTheLastYears(date, n = 5, format = 'yyyy-MM-dd HH:mm:ss') {
  let result = [];
  for (let i = 0; i < n; i++) {
    date.setFullYear(date.getFullYear() - 1);
    result.push(dateFtt(format, date));
  }
  return result.reverse();
}

/**
  * @description 获取未来n(7、30、60、90)天  时间数组
  * @param {Object} date - 日期对象  例如：new Date()
  * @param {number} [n=7] 未来多少天  例如：30 
  * @param {string} [format='yyyy-MM-dd HH:mm:ss'] 输出时间格式  例如：yyyy-MM-dd HH:mm:ss
  * @return {Object[]} result - 返回时间数组
  **/
function getNextDays(date, n = 7, format = 'yyyy-MM-dd HH:mm:ss') {
  let result = [];
  for (let i = 0; i < n; i++) {
    date.setDate(date.getDate() + 1);
    result.push(dateFtt(format, date));
  }
  return result;
}

/**
 * @description 1.封装数组对象的排序方法
 * @param {Object[]} dataList - 要排序的数组
 * @param {string} prop - 传入需要排序的字段
 * @param {boolean} bol - true: 升序；false: 降序；默认为true 升序
 * @return {Object[]} dataList - 返回改变完顺序的数组
 */
function compare(dataList, prop, bol = true) {
  dataList.sort(function (a, b) {
    if (bol) {
      return a[prop] - b[prop];  // 升序
    } else {
      return b[prop] - a[prop];  // 降序
    }
  });

  return dataList;
}

/**
 * @description 2.根据日期时间混合排序
 * @param {Object[]} dataList - 要排序的数组
 * @param {string} property - 传入需要排序的字段
 * @param {boolean} bol - true: 升序；false: 降序；默认为true 升序
 * @return {Object[]} dataList - 返回改变完顺序的数组
 */
function dateSort(dataList, property, bol = true) {
  dataList.sort(function (a, b) {
    if (bol) {
      return a[property].localeCompare(b[property]); // 升序
      // return Date.parse(a[property]) - Date.parse(b[property]);  // 升序
    } else {
      return b[property].localeCompare(a[property]); // 降序
      // return Date.parse(b[property]) - Date.parse(a[property]);  // 降序
    }
  })
  return dataList;
}

/**
 * @description 3.分别根据日期和时间进行排序
 * @param {Object[]} dataList - 要排序的数组
 * @param {string} property1 - 传入需要排序的字段1
 * @param {string} property2 - 传入需要排序的字段2
 * @param {boolean} bol - true: 升序；false: 降序；默认为true 升序
 * @return {Object[]} dataList - 返回改变完顺序的数组
 */
function dateSortTwo(dataList, property1, property2, bol = true) {
  dataList.sort(function (a, b) {
    if (bol) {
      return a[property1].localeCompare(b[property1]) || a[property2].localeCompare(b[property2]); // 升序
    } else {
      return b[property1].localeCompare(a[property1]) || b[property2].localeCompare(a[property2]); // 降序
    }
  })
  return dataList;
}

/**
 *  @description 实现数组并列排序
 * @param {Object[]} list - 需要排序的数组
 * @param {string} value - 需要排序的字段
 * @param {boolean} bol - true: 升序；false: 降序；默认为true 升序
 */
function parallelSorting(list, value, bol = true) {
  list.sort(function (a, b) {
    if (bol) {
      return a[value] - b[value];  // 升序
    } else {
      return b[value] - a[value];  // 降序
    }
  });
  for (let i = 0; i < list.length; i++) {
    if (i == 0) {
      list[i].index = i;
    } else {
      if (list[i - 1][value] == list[i][value]) {
        list[i].index = list[i - 1].index;
      } else {
        list[i].index = i;
      }
    }
  }
}


let activeBtn = 1;
let currentSelectedDate;
let timeDate;

function switchDate(val) {
  console.log('切换时间按钮', val);
  activeBtn = val;

  let dateList = getDateList();
  console.log('当前点击月份天数', dateList);
}

// 获取某月所有天数数组
function getDateList() {
  let dateList = [];
  let myDate = new Date();
  let year = parseInt(myDate.getFullYear());
  let month = parseInt(myDate.getMonth());
  let year2 = year;
  let month2 = month;

  // 上个月
  if (activeBtn === 1) {
    if (timeDate == null) {
      year2 = year;
      month2 = month + 1;
    } else {
      let str = timeDate;
      let arr = str.substring(0, str.length - 1).split("年");
      year2 = parseInt(arr[0]);
      month2 = parseInt(arr[1]);
    }

    month2 = Math.abs(month2 - 1);

    if (month2 === 0) {
      year2 = year2 - 1;
      month2 = 12;
    }

    month2 = month2 < 10 ? "0" + month2 : month2;
  } else if (activeBtn === 2) { // 当月
    month2 = month2 + 1;
    month2 = month2 < 10 ? "0" + month2 : month2;
  } else if (activeBtn === 3) {
    // 下个月
    if (timeDate == null) {
      year2 = year;
      month2 = month;
    } else {
      let str = timeDate;
      let arr = str.substring(0, str.length - 1).split("年");
      year2 = parseInt(arr[0]);
      month2 = parseInt(arr[1]);
    }

    month2 = Math.abs(month2 + 1);

    if (month2 === 13) {
      year2 = year2 + 1;
      month2 = 1;
    }
    month2 = month2 < 10 ? "0" + month2 : month2;
  }

  console.log(year2, month2);
  let days = new Date(year2, month2, 0).getDate();

  for (let k = 1; k <= days; k++) {
    k = k < 10 ? "0" + k : k;
    let str = year2 + "-" + month2 + "-" + k;
    dateList.push(str);
  }

  let yearMonth = year2 + "-" + month2;
  timeDate = year2 + "年" + month2 + "月";

  console.log('当前日期：', timeDate, '天数：', days);

  return dateList;
}



